home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Pier Shareware 1
/
Pier Shareware 1.iso
/
007a
/
ha0620.exe
/
HA0620.TXT
Wrap
Text File
|
1992-10-09
|
7KB
|
125 lines
======================================================================
Microsoft(R) Product Support Services Application Note (Text File)
HA0620: Macro Assembler Questions & Answers
======================================================================
Revision Date: 10/92
No Disk Included
The following information applies to Microsoft Macro Assembler
versions 5.1 and 6.0.
--------------------------------------------------------------------
| INFORMATION PROVIDED IN THIS DOCUMENT AND ANY SOFTWARE THAT MAY |
| ACCOMPANY THIS DOCUMENT (collectively referred to as an |
| Application Note) IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY |
| KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO |
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A |
| PARTICULAR PURPOSE. The user assumes the entire risk as to the |
| accuracy and the use of this Application Note. This Application |
| Note may be copied and distributed subject to the following |
| conditions: 1) All text must be copied without modification and |
| all pages must be included; 2) If software is included, all files |
| on the disk(s) must be copied without modification [the MS-DOS(R) |
| utility DISKCOPY is appropriate for this purpose]; 3) All |
| components of this Application Note must be distributed together; |
| and 4) This Application Note may not be distributed for profit. |
| |
| Copyright 1992 Microsoft Corporation. All Rights Reserved. |
| Microsoft and MS-DOS are registered trademarks and Windows |
| is a trademark of Microsoft Corporation. |
--------------------------------------------------------------------
1. Q. Why does my program hang or generate an illegal instruction
when I use a .386, .386P, .486, or .486P processor directive?
A. The 386 and 486 processors can operate with either 32-bit
operations or 16-bit operations being the default. In either
mode, a prefix byte (66h or 67h) at the beginning of the
instruction tells the processor to treat an instruction as a
nondefault operation. For example, if the processor sees a prefix
byte while in a 16-bit segment, it executes the instruction as a
32-bit operation.
When you assemble a file that uses full segment declarations,
Macro Assembler assumes that the default operations are 32 bit.
To change this assumption, you must use a USE16 modifier on the
SEGMENT directive. When you assemble a file that uses simplified
segment declarations, Macro Assembler assumes that the default
operations are 32 bit if a .386, .386P, .486, or .486P comes
before the .MODEL directive. Placing the processor directive
after the .MODEL assumes the 16-bit default operations.
2. Q. Why can't I display my Microsoft Macro Assembler source code
under Microsoft CodeView debugger?
A. If you are using full segment directives in your Macro Assembler
file, remember to give any code segments the class CODE. If they
are not given the class CODE, you cannot display the source file
when you enter CodeView.
3. Q. Why do I get errors when I try to reassemble the startup
source code that came with Microsoft C version 6.0?
A. These source files were assembled with Microsoft Macro Assembler
version 5.1 and include .INC files that were written specifically
for Macro Assembler 5.1. If you are using Macro Assembler 6.0,
you need to use the .INC files that come with Macro Assembler
6.0. Also, place /DMS_STARTUP in the flags used by the assembler
so that it uses the appropriate items out of the new .INC files.
NOTE: These errors can also occur in Microsoft FORTRAN and
earlier versions of Microsoft C Compiler.
4. Q. Why do I get an unresolved externals error when I link my
assembly routine with Microsoft C Compiler?
A. Microsoft C Compiler adds leading underscores to function and
variable names and preserves the case of names. By default,
Microsoft Macro Assembler does not add a leading underscore and
converts names to all capital letters. To make the assembler
match the behavior of the C compiler, use the .MODEL directive
and specify the language. (For example, specify ".MODEL small,
c.") To make the assembler preserve the case of names, use the
/Cx assembler switch in Macro Assembler 6.0 and the /MX assembler
switch in Macro Assembler versions 5.1 and earlier.
5. Q. Can I use Microsoft Programmer's WorkBench version 2.0,
which comes with Microsoft C/C++ Compiler version 7.0, to invoke
Microsoft Macro Assembler?
A. Yes, you can invoke Macro Assembler 6.0 from Programmer's
WorkBench 2.0. To do this, load the Macro Assembler extension
file for Programmer's WorkBench (PWBMASM.XXT). This extension
loads automatically if it has an .MXT extension and is located in
the same directory as Programmer's WorkBench 2.0. However, this
file, which is distributed with Programmer's WorkBench 2.0,
initially has an .XXT extension. Use the MS-DOS RENAME command to
rename the file from PWBMASM.XXT to PWBMASM.MXT.
NOTE: The .MXT files that ship with Programmer's WorkBench 1.1
do not work with Programmer's WorkBench 2.0.
6. Q. Why can't I place code at an absolute address with the
SEGMENT AT and ORG directives?
A. The linker that comes with Macro Assembler is designed to
generate relocatable programs that can run under MS-DOS,
Microsoft Windows, or OS/2. The linker is not designed to
generate absolute addressable code. Third-party link and locate
tools that generate absolute addressable code are available.
The ORG directive is meant to give a relative offset to the first
items in a segment (for example, 100h for .COM files). The
SEGMENT AT directive is used when you want to access memory that
is already in the computer at an absolute address (for example,
the ROM BIOS).
7. Q. Why does my program hang when I return from a procedure?
A. This problem typically occurs when the stack becomes corrupt. If
you push any registers onto the stack upon entry into a
procedure, you must pop those registers off the stack upon exit
from the procedure. You must have both an equal number of pushes
and pops and a RET instruction at the end of the procedure.